﻿using BLLUtilidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLLTarasca
{
    public class BLLCategoria: BLLPadre<TarascaDataContext>
    {
        public BLLCategoria(TarascaDataContext contexto) : base(contexto) { }
        public BLLCategoria() : this(new TarascaDataContext()) { }

        public List<TA_Categoria> TraerCategorias(int idCuenta)
        {
            return (from c in Contexto.TA_Categorias
                    where c.IdCuenta == idCuenta
                    orderby c.Nombre
                    select c).ToList();
        }

        public void Modificar(TA_Categoria categoria)
        {
            TA_Categoria categoriaVieja = Traer(categoria.IdCategoria);

            if (categoria.Nombre.ToLower() != categoriaVieja.Nombre.ToLower() && Traer(categoria.Nombre, categoria.IdCuenta.Value) != null)
                throw new BLLTarascaException("Ya existe una categoría " + categoria.Nombre);

            categoriaVieja.Nombre = categoria.Nombre;
            categoriaVieja.Color = categoria.Color;
        }

        public void EliminarCategoria(int idCategoria)
        {
            TA_Categoria categoria = Traer(idCategoria);
            Contexto.TA_Categorias.DeleteOnSubmit(categoria);
        }

        public TA_Categoria Traer(int idCategoria)
        {
            return Contexto.TA_Categorias.Where(c => c.IdCategoria == idCategoria).FirstOrDefault();
        }

        public TA_Categoria Traer(string nombre, int idCuenta)
        {
            return Contexto.TA_Categorias.Where(c => c.Nombre.ToLower().Equals(nombre.ToLower()) && c.IdCuenta == idCuenta).FirstOrDefault();
        }

        public void AgregarCategoria(TA_Categoria nuevaCategoria)
        {
            if (Traer(nuevaCategoria.Nombre, nuevaCategoria.IdCuenta.Value) != null)
                throw new BLLTarascaException("Ya existe una categoría " + nuevaCategoria);
            
            Contexto.TA_Categorias.InsertOnSubmit(nuevaCategoria);
        }

        public bool Pertenece(string nombreUsuario, int idCategoria)
        {
            return Contexto.TA_Categorias.Where(c => c.IdCategoria == idCategoria && c.TA_Cuenta.TA_Usuario.Nombre.ToLower().Equals(nombreUsuario.ToLower())).Count() > 0;
        }
    }
}
